package priv.yiyuan.example.design.visitor;

import java.util.ArrayList;
import java.util.List;

/**
 * Composite类：文件夹
 * <p>
 * 组合模式中的 Composite 类，代表文件夹，它也实现了 FileSystemComponent 接口，并维护一个 FileSystemComponent 列表，
 * 用于存储其包含的文件和子文件夹，其 accept 方法不仅会调用访问者中针对 Directory 类型的方法，还会递归地让其所有子组件
 * 接受同一个访问者，从而实现对整个文件系统的遍历。
 *
 * @author YiYuan
 * @data 2025/8/1
 * @apoNote
 */
public class Directory implements FileSystemComponent {

    private String name;

    private List<FileSystemComponent> components = new ArrayList<>();

    public Directory(String name) {
        this.name = name;
    }

    public void addComponent(FileSystemComponent component) {
        components.add(component);
    }

    public List<FileSystemComponent> getComponents() {
        return components;
    }

    @Override
    public void accept(FileSystemVisitor visitor) {
        visitor.visit(this);

        for (FileSystemComponent component : components) {
            component.accept(visitor);
        }

    }

    @Override
    public String getName() {
        return name;
    }
}
